<?php
namespace app\admin\model;

/*客服模型*/
use app\admin\model\CommonModel;

class KfReply extends CommonModel
{
    private $table_name = 'kf_reply';
    public function __construct()
    {
       parent::__construct();
    }
    /**初始化参数
     * @param $args [client_id,token,enc_string,nickname]
     * @return array
     */
    private function default_param($args)
    {
        $default = [
            "title"     => "",
            "content" => "",
            "sort"      => "",
            "keywords"  => ""
        ];
        return array_merge($default,$args);
    }

    /**新增一个自动回复记录
     * @param $args [kf_username,kf_password,nickname,cate_id]
     * @return client_id
     */
    public function addReply($args)
    {
        //初始化参数
        $args = $this->default_param($args);
        $enc_string= randString(15);

        if(empty($args['title']))
        {
            return $this->returnState(1,"信息填写不完整");
        }
        $args['keywords'] = !empty($args['keywords']) ? str_replace("，",",",trim($args['keywords'])) : "";
        //插入数据库
        db($this->table_name)->insertGetId([
            'title'       => $args['title'],
            'content'      => $args['content'],
            'keywords'     =>$args['keywords'],
            'sort'          => intval($args['sort']) > 0 ? intval($args['sort']) : 1
        ]);

        //返回成功标识
        return $this->returnState(0,"成功添加一个记录");
    }

    //获取所有自动回复
    public function all($args = [])
    {
        /**
         * $args参数说明
         * args.id 根据回复id
         * args.keyword 根据title,content模糊查询
         * pageLimit 每页显示多少条数据 默认15条
         */

        $pageLimit = isset($args['pageLimit']) && intval($args['pageLimit']) > 0 ? $args['pageLimit'] : 15;
        $where = [];
        if(isset($args['id']) && intval($args['id']) > 0)
        {
            $where['id'] = intval($args['id']);
        }

        if(isset($args['keyword']) && $args['keyword'])
        {
            $where['title|content'] = ['like','%'.$args['keyword'].'%'];
        }
        //获取数据
        $data = null;
        if(!empty($where))
        {
            $data = db($this->table_name)->where($where)->order('sort DESC, id ASC')->paginate($pageLimit);
        }
        else
        {
            $data = db($this->table_name)->order('sort DESC, id ASC')->paginate($pageLimit);
        }

        return [
            'data' => $data,
            'page' => $data->render()
        ];
    }

    /**获取一个自动回复记录
     * @param array $args key:[id,title,content], 中括号表示任选一个可以查询
     * @return bool
     */
    public function info($args)
    {

        if(empty($args)) return false;
        //参数合并
        $args = $this->default_param($args);
        //如果没有查询信息，返回空
        if((!isset($args['id']) || empty($args['id'] ))
            && empty($args['title'] )
            && empty($args['content'])
        ) return false;

        //根据id,title,content其中一个查询
        if(!empty($args['id']))
        {
            $filter = ['id'=>$args['id']];
        }
        elseif(!empty($args['title']))
        {
            $filter = ['title'=>$args['title']];
        }
        elseif(!empty($args['content']))
        {
            $filter = ['content'=>$args['content']];
        }
        if(empty($filter)) return false;

        //返回查询信息
        return  db($this->table_name)->where($filter)->find();
    }

    //删除自动回复
    public function del($args)
    {
        /**
         * args参数说明
         * args为一个数组，包含所有的id值
         */
        if(empty($args))
        {
            return $this->returnState(1,"没有记录被删除");
        }
        db($this->table_name)->where(['id'=>['in',implode(',',$args)]])->delete();
        return $this->returnState(0,"删除完毕");
    }

    //编辑一个记录
    public function edit($args)
    {
        /**
         * args参数说明
         * args.id
         * args.title
         * args.content
         * args.sort
         */

        //检查参数
        $args = $this->default_param($args);
        if(!isset($args['id']) || intval($args['id']) == 0)
        {
            return $this->returnState(1,"没有选中记录进行编辑");
        }

        //检查记录是否存在
        $info = $this->info(['id'=>intval($args['id'])]);
        if(!$info || empty($info))
        {
            return $this->returnState(1,"自动回复记录不存在，或者已被删除");
        }
        $args['keywords'] = !empty($args['keywords']) ? str_replace("，",",",trim($args['keywords'])) : "";

        $id = $info['id'];
        //合并两个数组
        $fields = ['title','content','sort','keywords'];
        $update = array_merge(resetArr($info,$fields),resetArr($args,$fields));

        //删除空的项
        $update = array_filter($update);
        //自动回复更新
        db($this->table_name)->where(['id'=>$id])->update($update);

        return $this->returnState(0,"更新完毕");
    }

}
